#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define A(i) a[(i)-1]
#define B(i) b[(i)-1]
int insertion(int *a,int s,int e)
{
	int i,j,k;
	int temp;
	for(i=s+1;i<=e;i++)
	{
		j=i;
		temp=A(j);
		while(j>s&&temp<A(j-1))
		{
			A(j)=A(j-1);
			j--;
		}
		A(j)=temp;
	}
	return 0;
}

int median(int *a,int s,int e)
{
	int i,j,k;
	int med;
	int n,m;
	int *b;
	n=e+1-s;
	m=(e-s)/5+1;
	b=(int *)malloc(m*sizeof(int));
	for(i=1;i<=m;i++)
	{
		if(i==m)
		{
			insertion(a,(i-1)*5+s,e);
			B(i)=A(((i-1)*5+e+s)/2);
		}
		else
		{
			insertion(a,(i-1)*5+s,i*5+s-1);
			B(i)=A((i-1)*5+s+2);
		}
	}
	if(m==1) 
	{
		med=b[0];
		free(b);
		return med;
	}
	med=median(b,1,m);
	free(b);
	return med;
}

int partition(int *a,int s,int e,int m)
{
	int i,j,temp;
	i=s-1;
	for(j=s;j<=e;j++)
	{
		if(A(j)<=m)
		{
			temp=A(j);
			i+=1;
			A(j)=A(i);
			A(i)=temp;
		}
	}
	return i;
}


int minelements(int *a,int s,int e,int p)
{
	int m,k,v;
	m=median(a,s,e);
	k=partition(a,s,e,m);
	if(k==e) return 0;
	v=k-s+1;
	if(p==v) return 0;
	(v>p)?(minelements(a,s,k,p)):(minelements(a,k+1,e,p-v));
	return 0;
}

int main()
{
	int i,j,k;
	int n,m,p;
	int *a;
	scanf("%d %d",&n,&p);
	a=(int *)malloc(n*sizeof(int));
	for(i=0;i<n;i++) scanf("%d",&a[i]);
	minelements(a,1,n,p);
	for(i=0;i<p;i++) printf("%d ",a[i]);
	printf("\n");
	return 0;
}

